﻿using Common.Contract.Customer.Request;
using Common.Contract.Customer.Response;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Common.Contract.Customer
{
    [ServiceContract]
    public interface ICustomer
    {
        #region CustomerService - ShopInfo actions
        [OperationContract]
        SearchShopInfosResponse SearchShopInfo(SearchShopInfosRequest request);

        [OperationContract]
        SearchShopCellsResponse SearchShopCell(SearchShopCellsRequest request);

        [OperationContract]
        RetrieveShopInfoResponse RetrieveShopInfo(RetrieveShopInfoRequest request);

        [OperationContract]
        ResponseRecord UpdateShopInfo(UpdateShopInfoRequest request);

        [OperationContract]
        ResponseRecord UpdateShopCell(UpdateShopCellRequest requestUpdateShop);

        [OperationContract]
        ResponseRecord AddShopInfo(AddShopInfoRequest request);

        [OperationContract]
        SearchShopBilltoResponse SearchShopBillto(SearchShopBilltoRequest request);

        [OperationContract]
        ResponseRecord UpdateShopBillto(UpdateShopBilltoRequest request);
        #endregion

        #region CustomerService - Region actions
        [OperationContract]
        SearchRegionsResponse SearchRegions(SearchRegionsRequest request);

        [OperationContract]
        RetrieveRegionResponse RetrieveRegion(RetrieveRegionRequest request);

        [OperationContract]
        ResponseRecord AddRegion(AddRegionRequest request);

        [OperationContract]
        ResponseRecord UpdateRegion(UpdateRegionRequest request);

        [OperationContract]
        ResponseRecord DeleteRegion(DeleteRegionRequest identifier);
        #endregion

        #region CustomerService - Organization actions
        [OperationContract]
        SearchOrganizationsResponse SearchOrganizations(SearchOrganizationsRequest request);

        [OperationContract]
        RetrieveOrganizationResponse RetrieveOrganization(RetrieveOrganizationRequest request);

        [OperationContract]
        ResponseRecord AddOrganization(AddOrganizationRequest request);

        [OperationContract]
        ResponseRecord UpdateOrganization(UpdateOrganizationRequest request);

        [OperationContract]
        ResponseRecord DeleteOrganization(DeleteOrganizationRequest identifier);
        #endregion

        #region CustomerService - Province actions
        [OperationContract]
        SearchProvincesResponse SearchProvinces(SearchProvincesRequest request);

        [OperationContract]
        RetrieveProvinceResponse RetrieveProvince(RetrieveProvinceRequest request);

        [OperationContract]
        ResponseRecord AddProvince(AddProvinceRequest request);

        [OperationContract]
        ResponseRecord UpdateProvince(UpdateProvinceRequest request);

        [OperationContract]
        ResponseRecord DeleteProvince(DeleteProvinceRequest identifier);
        #endregion

        #region CustomerService - District actions
        [OperationContract]
        SearchDistrictsResponse SearchDistricts(SearchDistrictsRequest request);

        [OperationContract]
        RetrieveDistrictResponse RetrieveDistrict(RetrieveDistrictRequest request);

        [OperationContract]
        ResponseRecord AddDistrict(AddDistrictRequest request);

        [OperationContract]
        ResponseRecord UpdateDistrict(UpdateDistrictRequest request);

        [OperationContract]
        ResponseRecord DeleteDistrict(DeleteDistrictRequest identifier);

        #endregion

        #region CustomerService - BilltoInf actions
        [OperationContract]
        SearchBilltoInfResponse SearchBilltoInf(SearchBilltoInfRequest request);

        [OperationContract]
        ResponseRecord UpdateBilltoInf(UpdateBillingInfoRequest request);
        #endregion

        #region CustomerService - ModelCat Actions
        [OperationContract]
        SearchModelCatResponse SearchModelCat(SearchModelCatRequest request);

        [OperationContract]
        ResponseRecord UpdateModelCat(UpdateModelCatRequest requestUpdateShop);
        #endregion

        #region CustomerService - Adhoc Actions
        [OperationContract]
        RetrieveIncentiveAdhocResponse RetrieveIncentiveAdhoc(RetrieveIncentiveAdhocRequest request);

        [OperationContract]
        RetrieveAdhocDetailResponse RetrieveAdhocDetail(RetrieveAdhocDetailRequest request);

        [OperationContract]
        ResponseRecord AddIncentiveAdhocDetail(AddIncentiveAdhocRequest request);

        [OperationContract]
        ResponseRecord UpdateIncentiveAdhoc(UpdateIncentiveAdhocRequest request);

        [OperationContract]
        ResponseRecord DeleteIncentiveAdhoc(DeleteIncentiveAdhocRequest request);

        [OperationContract]
        RetrieveIncentiveAdhocResponse RetrieveIncentiveAdhocBySchemeId(RetrieveIncentiveAdhocRequest request);

        [OperationContract]
        SearchIncentiveAdhocResponse SearchIncentiveAdhoc(SearchIncentiveAdhocRequest request);
        #endregion

        #region CustomerService Mrp Actions
        [OperationContract]
        SearchMrpResponse SearchMrp(SearchMrpRequest request);

        [OperationContract]
        ResponseRecord UpdateMRP(UpdateMrpRequest request);
        #endregion

        #region CustomerService Incentive Detail Actions
        [OperationContract]
        SearchIncentiveDetailResponse SearchIncentiveDetail(SearchIncentiveDetailRequest request);
        #endregion

        #region CustomerService Incentive Mst Actions
        [OperationContract]
        SearchIncentiveMstResponse SearchIncentiveMst(SearchIncentiveMstRequest request);
        #endregion

        #region CustomerService Incentive Balance Actions
        [OperationContract]
        SearchIncentiveBalanceResponse SearchIncentiveBalance(SearchIncentiveBalanceRequest request);
        #endregion
    }
}
